/*
 * Projeto Destinado a Prefeitura de Goiânia.
 * Projeto de Modernização do Arquitetura de Desenvolvimento de Software.
 * Todos os Direitos Reservados.
 */

package br.com.prefeitura.goiania.orcamento.util;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

/**
 * JSFUtil
 * Classe que representa utilidades basicas de JSF (Web).
 * 
 * @category JSF.
 * 
 */
public abstract class JSFUtil {
	
    /**
     * Construtor privado para garantir que a mesma nao seja instanciada, dado a que sua utilizaça seja estatica.
     */
    private JSFUtil(){}
    
    /**
     * Metodo que adiciona Mensagem de erro no contexto JSF
     * 
     * @param mensagem Mensagem de erro a ser adicionada no contexto JSF
     * 
     * @see javax.faces.application.FacesMessage
     * @see javax.faces.context.FacesContext
     * 
     */
	public static void adicionarMensagemErro(final String mensagem){
		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, mensagem, null));		
	}
	
    /**
     * Metodo que adiciona Mensagem de erro no contexto JSF
     * 
     * @param mensagem Mensagem de erro a ser adicionada no contexto JSF
     * @param detalhe Detalhe de mensagem dee erro que podera ser exibido na pagina.
     * 
     * @see javax.faces.application.FacesMessage
     * @see javax.faces.context.FacesContext
     * 
     */
	public static void adicionarMensagemErro(final String mensagem, final String detalhe ){
		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, mensagem, detalhe));		
	}
	
    /**
     * Metodo que adiciona Mensagem informativa no contexto JSF
     * 
     * @param mensagem Mensagem informativa a ser adicionada no contexto JSF
     * 
     * @see javax.faces.application.FacesMessage
     * @see javax.faces.context.FacesContext
     * 
     */
	public static void adicionarMensagemInformacao(final String mensagem){
		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, mensagem, null));
	}
	
    /**
     * Metodo que adiciona Mensagem de alerta no contexto JSF
     * 
     * @param mensagem Mensagem de alerta a ser adicionada no contexto JSF
     * 
     * @see javax.faces.application.FacesMessage
     * @see javax.faces.context.FacesContext
     * 
     */
	public static void adicionarMensagemAlterta(final String mensagem){
	    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, mensagem, null));		
	}
	
	/**
	 * Metodo que adiciona uma propriedade na sessao JSF
	 * 
	 * @param propriedade Nome da propriedade a ser adicionada.
	 * @param valor Valor da propriedade a ser adicionada.
	 * 
     * @see javax.faces.context.FacesContext
     * 
	 */
	public static void adicionarPropriedadeSessao(final String propriedade, final Object valor){
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(propriedade, valor); 
	}
	
	/***
	 * 
	 * @return String string
	 */
	public static String obterIpUsuario(){
	    return ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRemoteAddr();
	}
	
	/**
	 * Método que obtem a propriedade anteriormente adicionada na sessão JSF
	 * 
	 * @param propriedade nome da propriedade a ser obtida.
	 * 
	 * @return Object valo da propriedade retornado.
     * 
     * @see javax.faces.context.FacesContext
     * 
     */
	public static Object obterPropriedadeSecao(final String propriedade){
		return FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(propriedade);
	}

	/**
	 * Método que remove a propriedade anteriormente adicionada na sessão JSF
	 * 
	 * @param propriedade nome da propriedade a ser removida.
     * 
     * @see javax.faces.context.FacesContext
     * 
     */
	public static void removerPropriedadeSessao(final String propriedade){
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(propriedade);
	}

}